package Main;
import java.util.*;
import Monomials.Monom;
import Monomials.MonomFloat;
public class Polynomial {
protected ArrayList<Monom> polynomial;
public Polynomial() {
polynomial = new ArrayList<>();
}
protected Polynomial getDerivataPolynomial() {
Polynomial polynomial1 = new Polynomial();
for (int i = 0; i < polynomial.size(); i++) {
polynomial1.polynomial.add(polynomial.get(i).getDerivataMonom());
}
return polynomial1;
}
protected Polynomial getIntegralaPolynomial() {
Polynomial polynomial1 = new Polynomial();
for (int i = 0; i < polynomial.size(); i++) {
polynomial1.polynomial.add(polynomial.get(i).getIntegralaMonom());
}
return polynomial1;
}
protected Polynomial Addition(Polynomial polynomial1) {
Polynomial Polynomialresult = new Polynomial();
for (int i = 0; i < polynomial.size(); i++)
Polynomialresult.polynomial.add(polynomial.get(i).getMonom());
for (int i = 0; i < polynomial1.polynomial.size(); i++)
Polynomialresult.polynomial.add(polynomial1.polynomial.get(i).getMonom());
for (int i = 0; i < Polynomialresult.polynomial.size(); i++)
for (int j = i + 1; j < Polynomialresult.polynomial.size(); j++)
if (Polynomialresult.polynomial.get(i).getdegree() == Polynomialresult.polynomial.get(j).getdegree()) {
Polynomialresult.polynomial.get(i).sumMonom(Polynomialresult.polynomial.get(j));
Polynomialresult.polynomial.remove(j);
}
Collections.sort(Polynomialresult.polynomial);
return Polynomialresult;
}
protected Polynomial Subtraction(Polynomial polynomial1) {
Polynomial Polynomialresult = new Polynomial();
for (int i = 0; i < polynomial.size(); i++)
Polynomialresult.polynomial.add(polynomial.get(i).getMonom());
for (int i = 0; i < polynomial1.polynomial.size(); i++)
Polynomialresult.polynomial.add(polynomial1.polynomial.get(i).getcoefficientMinus());
for (int i = 0; i < Polynomialresult.polynomial.size(); i++)
for (int j = i + 1; j < Polynomialresult.polynomial.size(); j++)
if (Polynomialresult.polynomial.get(i).getdegree() == Polynomialresult.polynomial.get(j).getdegree()) {
Polynomialresult.polynomial.get(i).sumMonom(Polynomialresult.polynomial.get(j));
Polynomialresult.polynomial.remove(j);
}
Collections.sort(Polynomialresult.polynomial);
return Polynomialresult;
}
protected Polynomial Multiplication(Polynomial polynomial1) {
Polynomial Polynomialresult = new Polynomial();
Polynomial PolynomialIntermediar = new Polynomial();
for (int i = 0; i < polynomial.size(); i++)
PolynomialIntermediar.polynomial.add(polynomial.get(i).getMonom());
for (int i = 0; i < polynomial.size(); i++)
for (int j = 0; j < polynomial1.polynomial.size(); j++)
Polynomialresult.polynomial.add(
PolynomialIntermediar.polynomial.get(i).multiplicationMonom(polynomial1.polynomial.get(j)));
Polynomialresult.SumEqualDegrees();
Polynomialresult = Polynomialresult.RemoveZeroes();
return Polynomialresult;
}
protected Polynomial IntegerToFloat() // changes the integer polynomial to
// float
{
Polynomial pol = new Polynomial();
for (int i = 0; i < polynomial.size(); i++)
pol.polynomial.add(polynomial.get(i).getMonomReal());
return pol;
}
protected Polynomial[] Division(Polynomial polynomial) {
Polynomial q = new Polynomial();
Polynomial rezz[] = new Polynomial[2];
Polynomial r = IntegerToFloat();
MonomFloat t;
Polynomial Polynomial2 = polynomial.IntegerToFloat();
if (!Polynomial2.polynomial.isEmpty())
while (!r.polynomial.isEmpty()
&& r.polynomial.get(0).getdegree() >= Polynomial2.polynomial.get(0).getdegree())
//we compare the degrees, for avoiding the division with a polynomial with higher degree
{
t = r.polynomial.get(0).divisionMonom(Polynomial2.polynomial.get(0));//
q.polynomial.add(t);
q.SumEqualDegrees();
Polynomial result = new Polynomial();
for (int i = 0; i < Polynomial2.polynomial.size(); i++)
result.polynomial.add(t.multiplicationMonom(Polynomial2.polynomial.get(i)));
result.SumEqualDegrees();
r = r.Subtraction(result);
r = r.RemoveZeroes();
}
q.SumEqualDegrees();
rezz[0] = q; // quotient
rezz[1] = r; //remainder
return rezz; //rezz = array which contains the remainder and the result
}
protected Polynomial RemoveZeroes() {
Polynomial rez = new Polynomial();
for (int i = 0; i < polynomial.size(); i++) {
if (polynomial.get(i).getcoefficient().intValue() != 0)
rez.polynomial.add(polynomial.get(i).getMonom());
else if (polynomial.get(i).getcoefficient().floatValue() != 0.0)
rez.polynomial.add(polynomial.get(i).getMonom());
}
return rez;
}
protected void SumEqualDegrees() {
for (int i = 0; i < polynomial.size(); i++)
for (int j = i + 1; j < polynomial.size(); j++)
if (polynomial.get(i).getdegree() == polynomial.get(j).getdegree()) {
polynomial.get(i).sumMonom(polynomial.get(j));
polynomial.remove(j);
}
Collections.sort(polynomial);
}
protected String toStringPolynomial() {
String rez = "";
for (int i = 0; i < polynomial.size(); i++)
rez += polynomial.get(i).toString();
if (rez.isEmpty())
rez = "0";
return rez;
}
}